/ .. / / -> download
<?xml version="1.0"?>
<!-- 8/18/11 - KR - Removed xsl text automatically concatenating mm to width and height -->
<!-- 8/19/11 - KR - Corrected problem with figure ids that caused figure references to not work -->
<!-- 8/19/11 - KR - added dmc to ids to make them unique in pubs -->
<!-- 8/19/11 - KR - added a check for a reproduction value that is numeric only and assumes uom is mm if it finds one -->
<!-- 8/22/11 - KR - added coding for reproduction scale based on clarifications in Issue 4.1 -->
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
	<xsl:template match="figure">
		<xsl:if test="@changeMark!=0">
			<fo:change-bar-begin change-bar-class="figure" change-bar-style="solid" change-bar-color="black" change-bar-offset="8pt" change-bar-placement="left"/>
		</xsl:if>
		<xsl:choose>
			<xsl:when test="@changeType">
				<xsl:if test="@changeType!='delete'">
					<xsl:apply-templates select="graphic"/>
				</xsl:if>
			</xsl:when>
			<xsl:otherwise>
				<xsl:apply-templates select="graphic"/>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:if test="@changeMark!=0">
			<fo:change-bar-end change-bar-class="figure"/>
		</xsl:if>
	</xsl:template>
	<!--MIL-STD-3031A, para 5.14.1.3 Figure title.
	The figure title format shall:
	a. Include "Figure" in title case, followed by the figure number, a period, two spaces, and
	the title. (For example, "Figure 3. Fuel Indicator.")
	b. Capitalize the first letter of the first and each major word of the title.
	c. End with a period following the last word.
	d. Identify illustrations applicable to one Service in a joint service TM. (For example,
	"Figure 3. Fuel Indicator (Army Only).")
	e. Identify illustrations applicable to more than one Service in a joint service TM. (For
	example, "Figure 3. Indicator (Army and Air Force Only).")
	f. When too long to fit on one line, align the second line with the first letter of the title.-->
	<!--S1000D-i4.0.1_r1, Chap 3.9.5.2.1.5, para 2, 
	In procedural, process, crew and fault data modules, titles must be included for <figure>
	and <table> for formal tables. -->
	<!--S1000D-i4.0.1_r1, Chap 6.2.2, para 2.13.1
		Changes to figures, including their title lines, must be marked at the figure title line.-->
	<xsl:template match="figure/title">
		<xsl:apply-templates/>
	</xsl:template>
	<!--from MIL-STD-3031A, para 5.138.7.2.1 Color
	Unless specified otherwise by the acquiring activity, black and shades of black (gray scale) shall
	be used for figures in page oriented publications.-->
	<xsl:template match="figure/graphic" priority="10">
		<fo:block text-align="center" start-indent="0pt" color="black" keep-with-next="always">
			<xsl:if test="@changeMark!=0">
				<fo:change-bar-begin change-bar-style="solid" change-bar-color="black" change-bar-offset="8pt" change-bar-placement="left"/>
			</xsl:if>
			<xsl:choose>
				<xsl:when test="@changeType">
					<xsl:if test="@changeType!='delete'">
						<xsl:call-template name="do-graphic">
							<xsl:with-param name="include-graphic" select="true()"/>
						</xsl:call-template>
					</xsl:if>
				</xsl:when>
				<xsl:otherwise>
					<xsl:call-template name="do-graphic">
						<xsl:with-param name="include-graphic" select="true()"/>
					</xsl:call-template>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:if test="@changeMark!=0">
				<fo:change-bar-end/>
			</xsl:if>
		</fo:block>
		<xsl:if test="position()=last()">
			<xsl:apply-templates select="../legend"/>
		</xsl:if>
		<!--MIL-STD-3031A, para 5.63.1.2, ICN shall be placed outside the graphic except in cases where legacy
			graphics are used which already contain the ICN within the graphic and
			the project would encounter expense to remove it. The information control
			numbers are normally derived from the XML attribute infoEntityIdent 
			and put in place by the page layout system.   -->
		<xsl:if test="@infoEntityIdent">
			<fo:block text-align="right" keep-with-previous="always">
				<xsl:value-of select="@infoEntityIdent"/>
			</fo:block>
		</xsl:if>
		<!--MIL-STD-3031A, para 5.32.1.4, 
			The use of the attribute id is required on the following items:
			a. <figure>-->
		<fo:block font-weight="bold" text-align="center" space-before="12pt" space-after="8pt" start-indent="0pt" keep-with-previous="always">
			<xsl:if test="../@id">
				<xsl:attribute name="id"><xsl:apply-templates select="//dmodule/identAndStatusSection/dmAddress/dmIdent/dmCode"/><xsl:value-of select="../@id"/></xsl:attribute>
			</xsl:if>
			<!--MIL-STD-3031A, para 5.14.1.3 Figure title.
			The figure title format shall:
			a. Include "Figure" in title case, followed by the figure number, a period, two spaces, and
			the title. (For example, "Figure 3. Fuel Indicator.")
			b. Capitalize the first letter of the first and each major word of the title.
			c. End with a period following the last word.
			d. Identify illustrations applicable to one Service in a joint service TM. (For example,
			"Figure 3. Fuel Indicator (Army Only).")
			e. Identify illustrations applicable to more than one Service in a joint service TM. (For
			example, "Figure 3. Indicator (Army and Air Force Only).")
			f. When too long to fit on one line, align the second line with the first letter of the title.-->
			<!--MIL-STD-3031A, para 5.14.1.5 Figure numbers.
			Figure numbers shall be included for all illustrations except inline graphics (example equation).
			Figures shall be numbered using Arabic numbers sequentially within each data module starting
			with the Arabic numeral 1. The figure number shall precede the title.-->
			<!-- MIL-STD-3031, para 5.37.1.30 -
				The attribute catalogSeqNumberValue on the first occurrence of <catalogSeqNumber> in each IPD data 
				module is required. It shall be used to generate IPD figure numbers.
			-->
			<xsl:text>Figure  </xsl:text>
			<xsl:choose>
				<xsl:when test="ancestor-or-self::illustratedPartsCatalog">
					<xsl:variable name="extractFigNo">
						<xsl:value-of select="string-length(//catalogSeqNumber[1]/@catalogSeqNumberValue)-6"/>
					</xsl:variable>
					<xsl:choose>
						<xsl:when test="substring(//catalogSeqNumber[1]/@catalogSeqNumberValue, $extractFigNo, 2)>9">
							<xsl:value-of select="substring(//catalogSeqNumber[1]/@catalogSeqNumberValue, $extractFigNo, 2)"/>
						</xsl:when>
						<xsl:otherwise>
							<xsl:value-of select="substring(//catalogSeqNumber[1]/@catalogSeqNumberValue, $extractFigNo+1, 1)"/>
						</xsl:otherwise>
					</xsl:choose>
				</xsl:when>
				<xsl:otherwise>
					<xsl:number count="figure" level="any" format="1" from="content"/>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:text>.  </xsl:text>
			<xsl:apply-templates select="../title"/>
			<!--from MIL-STD-3031A, para 5.138.7.1, Table LVI Army business rules - figures. 
			When an illustration requires several sheets, 
			identification similar to (Sheet X of Y) shall be added after the title.
			All sheets of a multi-sheet illustration shall be considered one figure.
			Multisheet figures shall be consecutively numbered and the total number of sheets following the title
			Remaining sheet shall be numbered in consecutive order.-->
			<xsl:variable name="numSheets" select="count(../graphic)"/>
			<xsl:choose>
				<xsl:when test="$numSheets>1">
					<xsl:text> (Sheet </xsl:text>
					<xsl:number count="graphic" level="any" format="1" from="figure"/>
					<xsl:text> of </xsl:text>
					<xsl:value-of select="$numSheets"/>
					<xsl:text>)</xsl:text>
					<xsl:if test="@applicRefId">
						<xsl:text> (Applicable to: </xsl:text>
						<xsl:apply-templates select="@applicRefId"/>
						<xsl:text>)</xsl:text>
					</xsl:if>
				</xsl:when>
			</xsl:choose>
			<xsl:text>.</xsl:text>
		</fo:block>
	</xsl:template>
	<xsl:template match="symbol" priority="5">
		<xsl:call-template name="do-graphic">
			<xsl:with-param name="include-graphic" select="true()"/>
		</xsl:call-template>
	</xsl:template>
	<xsl:template name="do-graphic">
		<xsl:param name="include-graphic" select="true()"/>
		<xsl:variable name="content-width">
			<xsl:choose>
				<xsl:when test="@reproductionWidth != ''">
					<xsl:value-of select="@reproductionWidth"/>
					<xsl:call-template name="checkForUom">
						<xsl:with-param name="measure" select="@reproductionWidth"/>
					</xsl:call-template>
				</xsl:when>
				<!-- coding for reproduction scale based on clarifications in Issue 4.1 -->
				<xsl:when test="@reproductionScale != ''">
					<xsl:value-of select="@reproductionScale"/>
					<xsl:text>%</xsl:text>
				</xsl:when>
				<xsl:otherwise>auto</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<xsl:variable name="content-height">
			<xsl:choose>
				<xsl:when test="@reproductionHeight != ''">
					<xsl:value-of select="@reproductionHeight"/>
					<xsl:call-template name="checkForUom">
						<xsl:with-param name="measure" select="@reproductionWidth"/>
					</xsl:call-template>
				</xsl:when>
				<!-- coding for reproduction scale based on clarifications in Issue 4.1 -->
				<xsl:when test="@reproductionScale != ''">
					<xsl:value-of select="@reproductionScale"/>
					<xsl:text>%</xsl:text>
				</xsl:when>
				<xsl:otherwise>auto</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<xsl:choose>
			<xsl:when test="$include-graphic">
				<fo:external-graphic src="{unparsed-entity-uri(@infoEntityIdent)}" scaling="uniform" content-height="{$content-height}" content-width="{$content-width}"/>
			</xsl:when>
			<xsl:otherwise>
				<fo:inline-container display-align="center" text-align="center" block-progression-dimension="{$content-height}" inline-progression-dimension="{$content-width}" background-color="silver" color="red">
					<fo:block>Graphic Not Included</fo:block>
				</fo:inline-container>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<!-- Still getting an error from this code eof -->
	<xsl:template name="checkForUom">
<!--		<xsl:param name="measure" select=""/>
		<xsl:variable name="lastchar" select="substring($measure,string-length($measure),1)"/>
		<xsl:if test="$lastchar >= '0' and $lastchar <='9'">
			<xsl:text>mm</xsl:text>
		</xsl:if>-->
	</xsl:template>
	
	<xsl:template match="graphic">
		<fo:inline-container>
			<fo:block space-before="12pt" space-before.conditionality="retain">
				<xsl:call-template name="do-graphic"/>
			</fo:block>
		</fo:inline-container>
	</xsl:template>
	<!--MIL-STD-3031A, para 5.128.3.1.1.5 Foldout pages:
	If foldout pages are approved by the acquiring activity, they shall be the last printed material in
	the manual or volume.-->
	<!--MIL-STD-3031A, para 5.137.4.1 Army business rules - folding and binding:
	Foldout pages shall be the last printed material in the manual or volume.-->
	<xsl:template match="foldout">
		<xsl:choose>
			<xsl:when test="ancestor::pm">
				<xsl:apply-templates select="figure"/>
			</xsl:when>
			<xsl:otherwise/>
		</xsl:choose>
	</xsl:template>
</xsl:stylesheet>


/ gopher://khzae.net/0/s1kd/links/projects/3031/Army S1000D Stylesheets/FO-3031-A00-USARMY-FIGURE_001-00_EN-US.xsl
Styles: Light Dark Classic